/**
  ******************************************************************************
    * @project 便携式测控实验站上位机
  * @file    CSInfoReader.c
  * @author  hhy/wattercutter
  * @date    2020/1/14
  * @brief   获取数据 从serialport中读取数据，为CSInfoParser提供原始数据

    * @UpdateTime
            2021/1/14 hhy/wattercutter
  ******************************************************************************
*/

#include <exception>
#include "CSInfoReader.h"
#include "CSInfoParser.h"

#include <iostream>
using std::cout;
using std::endl;
/**
  * @brief  CSInfoReader的构造函数，初始化一个serialport实例
  * @param 无
  * @retval 无
  */
CSInfoReader::CSInfoReader()
{

}

/**
  * @brief  把当前serialport缓冲区的数据全部读取到一个uint8类型的数组中
  * @param
        packages 从串口读取到的包含数据包的数据
  * @retval
  *     numHasRead 从缓冲区读取到的字节数
  */
int CSInfoReader::readInfoFromSerialport(uint8_t* packages)
{
    int numHasRead(0);bool yorn = false;
    //numHasRead = _reader->readInfoFromSerialport(packages);
    /* 没有可用的串口设备则中止读取操作 退出函数 */
    if(QSerialPortInfo::availablePorts().isEmpty())
        return 0;

    _port = new QSerialPort(QSerialPortInfo::availablePorts()[0]);

    _port->setPort(QSerialPortInfo::availablePorts()[0]);
    if(!_port->open(QIODevice::ReadWrite)){
        yorn = true;
        goto next;
    }else{
        _port->setParity(QSerialPort::NoParity);
        _port->setBaudRate(QSerialPort::Baud115200);
        _port->setDataBits(QSerialPort::Data8);
        _port->setStopBits(QSerialPort::OneStop);
        _port->setFlowControl(QSerialPort::NoFlowControl);
        /* 开始从serialport读取数据 */
        /* 读取串口缓冲区所有的数据到CSInfo的缓冲区infoArray */
        _port->waitForReadyRead();
        QByteArray dataArray = _port->read(200);
        numHasRead = dataArray.size();
        if(INFOSIZE*3<numHasRead){
            for(int i=0;i<INFOSIZE*3;i++){
                *(packages+i) = dataArray[i];
            }
        }
    }

    next:;
    delete  _port;
    return numHasRead;
}
//int CSInfoReader::readInfoFromSerialport(uint8_t* packages)
//{
//    int numHasRead(0);
//    /* 获取一个serialport实例并完成初始化配置 */
//    //_port = new QSerialPort(QSerialPortInfo::availablePorts()[0]);
//    _port = new QSerialPort("COM3");

//    //_port->setPort();
//    try {
//        if(!_port->open(QIODevice::ReadWrite)){
//            return 0;
//        }else{
//            _port->setParity(_parity);
//            _port->setBaudRate(_baudRate);
//            _port->setDataBits(_dataBits);
//            _port->setStopBits(_stopBits);
//            _port->setFlowControl(_flowControl);
//            /* 开始从serialport读取数据 */
//            /* 读取串口缓冲区所有的数据到CSInfo的缓冲区infoArray */
//            QByteArray dataArray = this->_port->read(96);
//            uint8_t* ptrData = (uint8_t*)dataArray.data();
//            numHasRead = dataArray.size();
//            for(int i=0;i<INFOSIZE*2;i++){
//                *(packages+i) = *(ptrData+i);
//            }
//        }

//    } catch (_exception e) {
//        cout<<e.name<<endl;
//    }


//    return numHasRead;
//}
